Skip to main content

Vector3

Must be included via require.


__construct

The constructor takes up to 3 arguments:

local vector3 = require "pluto:vector3"
print(new vector3()) --> vector3(0, 0, 0)
print(new vector3(1)) --> vector3(1, 1, 1)
print(new vector3(1, 2)) --> vector3(1, 2, 0)
print(new vector3(1, 2, 3)) --> vector3(1, 2, 3)

There is also a shorthand for this:

local vector3 = require "pluto:vector3"
print(vector3(1, 2, 3)) --> vector3(1, 2, 3)

__tostring

As seen above, the __tostring metamethod provides a string representation of the class.

__add, __sub, __mul, __div

Vector3 instances support arithmetic operations. The right-hand side can either be a Vector3 instance or a number. They create a new instance for the result.

local vector3 = require "pluto:vector3"
print(new vector3(1) + new vector3(2)) --> vector3(3, 3, 3)
print(new vector3(0, 0.6, 0.4) * 3) --> vector3(0, 1.8, 1.2)

__eq

Vector3 instances can effortlessly be compared to each other.

local vector3 = require "pluto:vector3"
print(new vector3(2, 2, 2) == new vector3(2)) --> true
print(new vector3(1, 2, 3) == new vector3(2)) --> false

__len, magnitude

To get the magnitude of a vector, you can either use the unary length operator (#) or call the magnitude method:

local vec = new (require"pluto:vector3") (1, 2, 3)
print(#vec) --> 3.7416573867739
print(vec:magnitude()) --> 3.7416573867739

sum

Computes the sum of the x, y and z fields.

local vec = new (require"pluto:vector3") (1, 2, 3)
print(vec:sum()) --> 6

min

Returns the value of axis with the lowest value.

local vec = new (require"pluto:vector3") (1, 2, 3)
print(vec:min()) --> 1

max

Returns the value of axis with the highest value.

local vec = new (require"pluto:vector3") (1, 2, 3)
print(vec:max()) --> 3

dot

Computes the dot product with the Vector3 given as an argument.

local vector3 = require "pluto:vector3"
print(new vector3(1):dot(new vector3(2))) --> 6

abs

Returns a new Vector3 instance with each axis being an absolute value.

local vector3 = require "pluto:vector3"
print(new vector3(-1, -2, 3):abs()) --> vector3(1, 2, 3)

normalized, normalised

Returns a new Vector3 instance that is a unit vector equivalent.

local vector3 = require "pluto:vector3"
print(new vector3(0, 3, 0):normalized()) --> vector3(0.0, 1.0, 0.0)

torot

Returns a rotation vector based on the direction given by the current vector.

You can specify the up-axis and handedness of the coordinate system. By default, a left-handed Y-up system is used.

The up-axis also determines which axis contains which value:

  • Y-Up: Pitch, Yaw, Roll
  • Z-Up: Pitch, Roll, Yaw
local vector3 = require "pluto:vector3"
print(new vector3(0, 1, 0):torot("y")) -- Y up. Pointing up -> vector3(90.0, 0.0, 0)
print(new vector3(0, 0, -1):torot("z")) -- Z up. Pointing down -> vector3(-90.0, 0, -0.0)
print(new vector3(1, 0, 0):torot("yr")) -- Y up, right-handed. Pointing right -> vector3(0.0, -90.0, 0)
print(new vector3(1, 0, 0):torot("yl")) -- Y up, left-handed. Pointing right -> vector3(0.0, 90.0, 0)
print(new vector3(1, 0, 0):torot("zr")) -- Z up, right-handed. Pointing right -> vector3(0.0, 0, 90.0)
print(new vector3(0, 0, 1):torot("y")) -- Y up. Pointing forward -> vector3(0.0, 0.0, 0)
print(new vector3(0, 0, -1):torot("y")) -- Y up. Pointing backward -> vector3(0.0, 180.0, 0)

lookat

Returns a rotation vector based on the position given by the current vector and argument.

local v3 = require "pluto:vector3"
print(new v3(0):lookat(new v3(0, 1, 0), "y")) -- Y up. From origin to a point above -> vector3(90.0, 0.0, 0)

todir

Returns a direction vector based on the rotation given by the current vector.

local vector3 = require "pluto:vector3"
print(new vector3(90, 0, 0):todir("y")) -- Y up. Pointing up -> vector3(0.0, 1.0, 6.1232339957368e-17)
print(new vector3(0, 90, 0):todir("yl")) -- Y up, left-handed. Pointing right -> vector3(1.0, 0.0, 6.1232339957368e-17)
print(new vector3(0, 90, 0):todir("yr")) -- Y up, right-handed. Pointing right -> vector3(-1.0, 0.0, 6.1232339957368e-17)